package cn.plugins.generator.datatype

/**
 * 创建于 2020-05-26 22:59
 *
 * @author jiangyun
 * @类说明：pgsql数据类型
 */
object PostgresqlDataType {
    /**
     * 获取postgresql字段类型信息
     *
     * @param languageType 语言类型(java,kotlin)
     * @return
     */
    fun getPostgresqlParamType(languageType: String): Map<String, String>? {
        val map: MutableMap<String, String> = HashMap(32)
        map["bigint"] = "Long"
        map["int8"] = "Long"
        map["bigserial"] = "Long"
        map["serial8"] = "Long"
        map["bit"] = "Boolean"
        map["varbit"] = "Boolean"
        map["boolean"] = "Boolean"
        map["bool"] = "Boolean"
        map["box"] = if (languageType == "java") "Object" else "Any"
        //map["bytea"] = if (languageType == "java") "byte[]" else "Any"
        map["varchar"] = "String"
        map["char"] = "String"
        map["cidr"] = "String"
        map["circle"] = if (languageType == "java") "Object" else "Any"
        map["date"] = "Date"
        map["double precision"] = "Double"
        map["float8"] = "Double"
        map["inet"] = "String"
        map["integer"] = if (languageType == "java") "Integer" else "Int"
        map["int"] = if (languageType == "java") "Integer" else "Int"
        map["int4"] = if (languageType == "java") "Integer" else "Int"
        map["interval"] = if (languageType == "java") "Object" else "Any"
        map["line"] = if (languageType == "java") "Object" else "Any"
        map["lseg"] = if (languageType == "java") "Object" else "Any"
        map["path"] = if (languageType == "java") "Object" else "Any"
        map["point"] = if (languageType == "java") "Object" else "Any"
        map["polygon"] = if (languageType == "java") "Object" else "Any"
        map["macaddr"] = "String"
        map["money"] = "BigDecimal"
        map["numeric"] = "BigDecimal"
        map["decimal"] = "BigDecimal"
        map["real"] = "Float"
        map["float4"] = "Float"
        map["smallint"] = if (languageType == "java") "Integer" else "Int"
        map["int2"] = if (languageType == "java") "Integer" else "Int"
        map["serial"] = if (languageType == "java") "Integer" else "Int"
        map["serial4"] = if (languageType == "java") "Integer" else "Int"
        map["text"] = "String"
        map["time"] = "Date"
        map["timetz"] = "Date"
        map["timestamp"] = "Date"
        map["timestamptz"] = "Date"

        return map
    }

    /**
     * 获取postgresql完整字段类型信息
     *
     * @param languageType 语言类型(java,kotlin)
     * @return
     */
    fun getFullPostgresqlParamType(languageType: String): Map<String, String>? {
        val map: MutableMap<String, String> = HashMap(32)
        map["bigint"] = if (languageType == "java") "java.lang.Long" else "Long"
        map["int8"] = if (languageType == "java") "java.lang.Long" else "Long"
        map["bigserial"] = if (languageType == "java") "java.lang.Long" else "Long"
        map["serial8"] = if (languageType == "java") "java.lang.Long" else "Long"
        map["bit"] = if (languageType == "java") "java.lang.Long" else "Boolean"
        map["varbit"] = if (languageType == "java") "java.lang.Long" else "Boolean"
        map["boolean"] = if (languageType == "java") "java.lang.Long" else "Boolean"
        map["bool"] = if (languageType == "java") "java.lang.Long" else "Boolean"
        map["box"] = if (languageType == "java") "java.lang.Object" else "Any"
        //map["bytea"] = if (languageType == "java") "byte[]" else "Any"
        map["varchar"] = if (languageType == "java") "java.lang.String" else "String"
        map["char"] = if (languageType == "java") "java.lang.String" else "String"
        map["cidr"] = if (languageType == "java") "java.lang.String" else "String"
        map["circle"] = if (languageType == "java") "java.lang.Object" else "Any"
        map["date"] = if (languageType == "java") "java.util.Date" else "Date"
        map["double precision"] = if (languageType == "java") "java.lang.Double" else "Double"
        map["float8"] = if (languageType == "java") "java.lang.Double" else "Double"
        map["inet"] = if (languageType == "java") "java.lang.String" else "String"
        map["integer"] = if (languageType == "java") "java.lang.Integer" else "Int"
        map["int"] = if (languageType == "java") "java.lang.Integer" else "Int"
        map["int4"] = if (languageType == "java") "java.lang.Integer" else "Int"
        map["interval"] = if (languageType == "java") "java.lang.Object" else "Any"
        map["line"] = if (languageType == "java") "java.lang.Object" else "Any"
        map["lseg"] = if (languageType == "java") "java.lang.Object" else "Any"
        map["path"] = if (languageType == "java") "java.lang.Object" else "Any"
        map["point"] = if (languageType == "java") "java.lang.Object" else "Any"
        map["polygon"] = if (languageType == "java") "java.lang.Object" else "Any"
        map["macaddr"] = if (languageType == "java") "java.lang.String" else "String"
        map["money"] = "java.math.BigDecimal"
        map["numeric"] = "java.math.BigDecimal"
        map["decimal"] = "java.math.BigDecimal"
        map["real"] = if (languageType == "java") "java.lang.Float" else "Float"
        map["float4"] = if (languageType == "java") "java.lang.Float" else "Float"
        map["smallint"] = if (languageType == "java") "java.lang.Integer" else "Int"
        map["int2"] = if (languageType == "java") "java.lang.Integer" else "Int"
        map["serial"] = if (languageType == "java") "java.lang.Integer" else "Int"
        map["serial4"] = if (languageType == "java") "java.lang.Integer" else "Int"
        map["text"] = if (languageType == "java") "java.lang.String" else "String"
        map["time"] = if (languageType == "java") "java.util.Date" else "Date"
        map["timetz"] = if (languageType == "java") "java.util.Date" else "Date"
        map["timestamp"] = if (languageType == "java") "java.util.Date" else "Date"
        map["timestamptz"] = if (languageType == "java") "java.util.Date" else "Date"

        return map
    }
}